#include "vtor_menu.h"
#include "vtor_printf.h"

#ifdef __VTOR_MENU__

VtorMenu* VtorMenu_curMenu = NULL;


void VtorMenu_Display()
{
	// 显示预处理
	VtorMenu_PreProcess();
	// 先绘制标题
	VtorMenu* menu = VtorMenu_curMenu;
	VtorMenu* subMenu = NULL;
	// 再绘制菜单内容，从1开始，因为0表示了上级目录
	for (unsigned char itemIdx = 0; itemIdx < menu->itemCnt; ++itemIdx)
	{
		subMenu = menu->item[itemIdx];
		// 0指向父菜单，显示时需要调整为自身
		if (subMenu == menu->item[0])
		{
			subMenu = menu;
		}
		VtorMenu_DisplaySubMenu(itemIdx, subMenu);
	}
}

void VtorMenu_Tree(VtorMenu* menu)
{
	static int tabCnt = 0;
	uint8_t prefixStr[11] = "\t\t\t\t\t\t\t\t\t\t";
	prefixStr[tabCnt] = '\0';
	VtorDebugChanPrintf("%s%s:%d\r\n", prefixStr, menu->name, menu->value);
	if(menu->itemCnt > 1) // 有    除自身外的     子项
	{
		tabCnt++;
		for(int idx = 1; idx < menu->itemCnt; idx++)
		{
			VtorMenu_Tree(menu->item[idx]);
		}
		tabCnt--;
	}
}

void VtorMenu_Operate(uint8_t opType, int32_t opValue)
{
	VtorMenu* menu = VtorMenu_curMenu;
	VtorMenu* subMenu = menu->item[menu->itemIdx];
	// 0指向父菜单，操作时需要调整为自身
	if (subMenu == menu->item[0])
	{
		subMenu = menu;
	}
	// 点击操作会改变pCurVtorMenu，单独处理！！！并且不使用局部变量
	if (VTOR_MENU_OPERATE_ENTER == opType)
	{
		VtorMenu_curMenu = VtorMenu_curMenu->item[VtorMenu_curMenu->itemIdx]; // 直接item跳转即可
		return ;
	}
	switch(opType)
	{
	// 针对项选择，需要操作pCurVtorMenu
	case VTOR_MENU_OPERATE_ITEM_UP:
		menu->itemIdx -= opValue;
		break;
	case VTOR_MENU_OPERATE_ITEM_DOWN:
		menu->itemIdx += opValue;
		break;
	case VTOR_MENU_OPERATE_ITEM_SELECT:
		menu->itemIdx = opValue;
		break;
	// 针对项的值，需要操作pCurMenuIte
	case VTOR_MENU_OPERATE_VALUE_UP:
		subMenu->value += opValue;
		break;
	case VTOR_MENU_OPERATE_VALUE_DOWN:
		subMenu->value -= opValue;
		break;
	case VTOR_MENU_OPERATE_VALUE_SET:
		subMenu->value = opValue;
		break;
	case VTOR_MENU_OPERATE_CLICK_HANDLER:
		VtorMenu_ClickHandler(subMenu);
		break;
	default:
		break;
	}
	menu->itemIdx =  (menu->itemIdx + menu->itemCnt) % (menu->itemCnt);
	// 操作后再处理
	VtorMenu_ReProcess();
}

void VtorMenu_Relate(VtorMenu* menu, VtorMenu* subMenu)
{
	// 将子菜单放入父菜单	的列表中，再元素个数加1
	menu->item[menu->itemCnt] = subMenu;
	menu->itemCnt++;

	// 为子菜单设置父菜单，将元素个数设置成1
	subMenu->item[0] = menu;
	subMenu->itemCnt = 1;
}


#endif // __VTOR_MENU__
